package br.edu.eseg.brproject.model;

// Generated May 29, 2011 12:04:47 PM by Hibernate Tools 3.4.0.CR1

import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.validator.NotNull;

/**
 * Tarefa generated by hbm2java
 */
@Entity
@Table(name = "tarefa" )
public class Tarefa implements java.io.Serializable {

	private Long id;
	private Projeto projeto;
	private Date fim;
	private Date inicio;
	private Boolean milestone;
	private String nome;
	private Double porcentcomp;
	private Set<Tarefa> tarefaspredecessoras;
	private Set<Tarefa> subtarefas;
	private Set<Utilizacaorecurso> utilizacaorecursos = new HashSet<Utilizacaorecurso>(
			0);

	public Tarefa() {
	}

	public Tarefa(Projeto projeto, Date fim, Date inicio) {
		this.projeto = projeto;
		this.fim = fim;
		this.inicio = inicio;
	}

	public Tarefa(Long id, Projeto projeto, Date fim, Date inicio,
			Boolean milestone, String nome, Double porcentcomp,
			Set<Tarefa> tarefaspredecessoras, Set<Tarefa> subtarefas,
			Set<Utilizacaorecurso> utilizacaorecursos) {
		super();
		this.id = id;
		this.projeto = projeto;
		this.fim = fim;
		this.inicio = inicio;
		this.milestone = milestone;
		this.nome = nome;
		this.porcentcomp = porcentcomp;
		this.tarefaspredecessoras = tarefaspredecessoras;
		this.subtarefas = subtarefas;
		this.utilizacaorecursos = utilizacaorecursos;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id")
	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "projetoid", nullable = false)
	@NotNull
	public Projeto getProjeto() {
		return this.projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "fim", nullable = false, length = 19)
	@NotNull
	public Date getFim() {
		return this.fim;
	}

	public void setFim(Date fim) {
		this.fim = fim;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "inicio", nullable = false, length = 19)
	@NotNull
	public Date getInicio() {
		return this.inicio;
	}

	public void setInicio(Date inicio) {
		this.inicio = inicio;
	}

	@Column(name = "milestone")
	public Boolean getMilestone() {
		return this.milestone;
	}

	public void setMilestone(Boolean milestone) {
		this.milestone = milestone;
	}

	@Column(name = "nome")
	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@Column(name = "porcentcomp", precision = 22, scale = 0)
	public Double getPorcentcomp() {
		return this.porcentcomp;
	}

	public void setPorcentcomp(Double porcentcomp) {
		this.porcentcomp = porcentcomp;
	}


	@OneToMany(fetch = FetchType.LAZY, mappedBy = "tarefa")
	public Set<Utilizacaorecurso> getUtilizacaorecursos() {
		return this.utilizacaorecursos;
	}

	public void setUtilizacaorecursos(Set<Utilizacaorecurso> utilizacaorecursos) {
		this.utilizacaorecursos = utilizacaorecursos;
	}

	@ManyToMany(fetch = FetchType.LAZY, targetEntity = br.edu.eseg.brproject.model.Tarefa.class)
	@JoinTable(name = "tarefapredecessora", joinColumns = @JoinColumn(name = "tarefapredecessoraid", nullable = false), inverseJoinColumns = @JoinColumn(name = "tarefaid", nullable = false))
	public Set<Tarefa> getTarefaspredecessoras() {
		return tarefaspredecessoras;
	}

	public void setTarefaspredecessoras(Set<Tarefa> tarefaspredecessoras) {
		this.tarefaspredecessoras = tarefaspredecessoras;
	}

	@ManyToMany(fetch = FetchType.LAZY, targetEntity = br.edu.eseg.brproject.model.Tarefa.class)
	@JoinTable(name = "subtarefa", joinColumns = @JoinColumn(name = "subtarefaid", nullable = false), inverseJoinColumns = @JoinColumn(name = "tarefaid", nullable = false))
	public Set<Tarefa> getSubtarefas() {
		return subtarefas;
	}

	public void setSubtarefas(Set<Tarefa> subtarefas) {
		this.subtarefas = subtarefas;
	}

}